package string;

/**
 * 1.java会将所有使用字面量（直接量）形式创建的字符串对象缓存在常量池中，
 * 每当使用相同字面量形式创建字符串时，会重用对象以减少内存开销
 *
 * 。。。。。。
 */
public class StringDemo {
    public static void main(StringAndStringBuilderDemo[] args) {
        String s1 = "123abc";// 字面量创建的字符串第一次使用时会缓存在常量池中
        String s2 = "123abc";// 重用s1对象（重用常量池中“123abc"对象）
        String s3 = "123abc";// 依然重用
        System.out.println(s1==s2);// true
        System.out.println(s1==s3);// true

        String s4 = new String("123abc");
        System.out.println(s4==s1);// false

        String s = "123";
        String s5 = s+"abc";
        System.out.println(s5==s1);// 字符串是不变对象，拼接字符串会产生新对象，s5指向新对象
        String s6 = "123"+"abc";// false,没有重用常量池对象
        System.out.println(s6==s1);// 触发预计算特性，直接编译为String s6 = "123abc",会复用对象
        System.out.println(s6==s1);// true

        String s7 = "123abc";
        String s8 = new String("123abc");
        System.out.println(s7==s8); // false, ==是比较地址，因为地址不同，所以为false
        System.out.println(s7.equals(s8));// true,equals()比较内容相同

    }
}
